/*
基础数据类型
1. boolean
2. number
3. string
4. null和undefined
5. 数组
6. 元组(Tuple)
7. 枚举(enum)
8. any
9. void
10. object
*/
(function () {
    // 1. boolean
    var isDone = false;
    isDone = true;
    // isDone = 'abc' // error  不能将类型“string”分配给类型“boolean”
    // 2. number
    var age = 12;
    // age = true // error
    // 3. string
    var name = 'tom';
    name = "\u6211\u53EB" + name + ", \u4ECA\u5E74" + age;
    // 4. null和undefined
    var n = null;
    // n = 'abc'  // error
    var u = undefined;
    // u = 123 // error
    /* null和undefined是任意类型的子类型 */
    age = null;
    age = undefined;
    // 5. 数组
    var arr = [1, 3,];
    var arr2 = ['a', 'abc',];
    arr.push(4);
    // arr.push('abc') // error
    // 6. 元组(Tuple) 已知元素数量和类型的数组
    var t;
    t = [123, 'abc'];
    // t = [123, 234] // error
    // 7. 枚举(enum)
    /* const RED = 1
    const BLUE = 2
    const GREEN = 3
    let color = RED */
    var Color;
    (function (Color) {
        Color[Color["Red"] = 0] = "Red";
        Color[Color["Blue"] = 3] = "Blue";
        Color[Color["Green"] = 4] = "Green";
    })(Color || (Color = {}));
    console.log(Color);
    var myColor = Color.Red;
    console.log(myColor, Color.Blue, Color[2]);
    // 8. any
    var anyValue = 3;
    anyValue = 'abc';
    var arr3 = ['abc', 123, true];
    // 9. void   经常用于定义函数没有返回值
    function fn() {
        // return 'abc' // error
        // return undefined  // undefined是任意类型的子类型
    }
    // 10. object
    var obj = {};
    obj = [];
    obj = function () { };
    // obj = 'abc' // error
    obj = new String('abc');
    obj = null;
})();
/*
强类型的好处:
  正确语法的提示补全
  错误语法的错误提示
*/ 
